home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / dev / ccdev.h < prev    next >
C/C++ Source or Header  |  1989-04-12  |  4KB  |  165 lines

  1. /*
  2.  * ccdev.h --
  3.  *
  4.  *    Declarations of SPUR Cache Controller device interface.
  5.  *
  6.  * Copyright 1988 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  *
  15.  * $Header: /sprite/src/lib/include/dev/RCS/ccdev.h,v 1.3 89/04/12 20:35:04 mendel Exp $ SPRITE (Berkeley)
  16.  */
  17.  
  18. #ifndef _DEVCC_H
  19. #define _DEVCC_H
  20.  
  21. #include "spur.md/kernel/mach.h"    /* For MACH_MAX_NUM_PROCESSORS */
  22. #include "spur.md/kernel/timerTick.h"
  23.  
  24. /* constants */
  25. /*
  26.  * Cache Controller Mode register bits.
  27.  * (see SPUR-MSA page 24-25)
  28.  */
  29.  
  30. #define    MODE_PERF_COUNTER_MASK    0x07
  31. #define    MODE_GARTH        0x08
  32. #define    MODE_T0_ENABLE        0x10
  33. #define MODE_T1_ENABLE        0x20
  34. #define    MODE_T2_ENABLE        0x40
  35. #define    MODE_DAVID        0x80
  36.  
  37. /*
  38.  * Mode register performance counters mode bits.
  39.  *    (MODE_REG & MACH_MODE_PERF_COUNTER_MASK)
  40.  * (See SPUR-MSA page 25)
  41.  */
  42.  
  43. #define    MODE_PERF_COUNTER_OFF    0x00
  44. #define    MODE_PERF_COUNTER_SNOOP    0x01
  45. #define MODE_PERF_COUNTER_USER    0x05
  46. #define MODE_PERF_COUNTER_SYS    0x06
  47. #define    MODE_PERF_COUNTER_BOTH    0x07
  48.  
  49. #define    DEV_CC_MAX_OFFSET    sizeof(CCdev)    /* Size of CC. */
  50.  
  51. /*
  52.  * User changable mode register bits.
  53.  */
  54.  
  55. #define    DEV_CC_USER_MODE_BITS    ((unsigned char) \
  56.             ~(MODE_T0_ENABLE|MODE_T1_ENABLE|MODE_T2_ENABLE))
  57.  
  58. /*
  59.  * IoControl's for SPUR CC.
  60.  *
  61.  * IOC_CCDEV_SET_MODE - Set the mode register. Inbuffer should contain a
  62.  * single unsigned char specifing the new mode register values.  Note that
  63.  * only bits specified in DEV_CC_USER_MODE_BITS maybe changed by the user.
  64.  * Other bits will be left unmodified. 
  65.  * IOC_CCDEV_READ_T0 - Do a stable read of the 64bit counter T0. The outBuffer
  66.  * contains a devCounter structure.
  67.  */
  68.  
  69. #define    IOC_CCDEV        (2 << 16)
  70. #define    IOC_CCDEV_SET_MODE    (IOC_CCDEV | 0x1)      
  71. #define    IOC_CCDEV_READ_T0    (IOC_CCDEV | 0x2)      
  72.  
  73.  
  74. /* data structures */
  75.  
  76. /*
  77.  * CCdevCounters - Memory image of Cache Controller counter registers C0-C15.
  78.  */
  79.  
  80. typedef struct CCdevCounters {
  81.     unsigned int    value;        /* Value of counter. */
  82.     unsigned int    padding;    /* Padding (not used). */
  83. } CCdevCounters;
  84.  
  85. /*
  86.  * CCdevRTPM - Memory image of Cache Contoller RPTM/GSN register. 
  87.  */
  88. typedef struct CCdevRTPM {
  89.     unsigned int        :12;
  90.     unsigned int    addr    :20;    /* Address */
  91.     unsigned char    gsn;        /* GSN */
  92.     unsigned int        :24;    /* padding. */
  93. } CCdevRTPM;
  94.  
  95. /*
  96.  * CCdevREG38 - Memory image of Cache Contoller 38 bit registers
  97.  */
  98. typedef struct CCdevREG38 {
  99.     unsigned int    low;        /* Low 32 bits */
  100.     unsigned char    high    :6;    /* High 6 bits */
  101.     unsigned int        :26;    
  102. } CCdevREG38;
  103.  
  104. /*
  105.  * CCdev - Memory image of Cache Controller registers. 
  106.  */
  107.  
  108. typedef struct CCdev {
  109.     CCdevRTPM    rtpm[4];    /* RPTM{0,1,2,3} */
  110.     CCdevREG38    gva;        /* GVA */
  111.     CCdevREG38    pteva;        /* PTEVA */
  112.     CCdevREG38    rpteva;        /* RPTEVA */
  113.     CCdevREG38    g;        /* G */
  114.     unsigned int    t0_low;        /* T0<31:0> */
  115.     unsigned int        :32;    
  116.     unsigned int    t0_high;    /* T0<63:32> */
  117.     unsigned int        :32;    
  118.     unsigned int    t1;        /* T1 */
  119.     unsigned int        :32;    
  120.     unsigned int    t2;        /* T2 */
  121.     unsigned int        :32;    
  122.     unsigned int    istatus;    /* Istatus */
  123.     unsigned int        :32;    
  124.     unsigned int    imask;        /* Imask */
  125.     unsigned int        :32;    
  126.     unsigned int    festatus;    /* FEStatus */
  127.     unsigned int        :32;    
  128.     unsigned char    slotid;        /* SlotId */
  129.     unsigned char    mode;        /* Mode */
  130.     unsigned int        :16;
  131.     unsigned int        :32;    
  132.     CCdevCounters        c[16];    /* C0 thru C15 */
  133. } CCdev;
  134.  
  135. /*
  136.  * A structure containing the 64bit version of the c0 thru c15 counters.
  137.  */
  138. typedef struct CCdev64bitCounter {
  139.     unsigned int    low;    /* Low 32 bit of value. */
  140.     unsigned int    high;    /* High 32 bit of value. */
  141. } CCdev64bitCounter;
  142.  
  143. /*
  144.  * The memory image of the processed cache controler device.
  145.  */
  146. typedef struct PCCdev {
  147.     CCdev64bitCounter    t0;    /* The t0 64 bit free running counter */
  148.     CCdev64bitCounter    c[16];    /* Counter c0 thru c15. */
  149. } PCCdev[MACH_MAX_NUM_PROCESSORS];
  150.  
  151. /*
  152.  * Compute offsets of a register.
  153.  */
  154.  
  155. #define    CC_OFFSET_OF(field)    ((int)&(((CCdev *) 0)->field))
  156.  
  157. /*
  158.  * Smallest user writtable offset - nothing below the first counter.
  159.  */
  160.  
  161. #define    DEV_CC_MIN_USER_OFFSET     (CC_OFFSET_OF(c[0]))
  162.  
  163. #endif _DEVCC_H
  164.  
  165.